Thông báo

Collapse
No announcement yet.

Xin giu`p đỡ về timer và ngắt

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin giu`p đỡ về timer và ngắt

    Em muốn viết 1 chương trình delay dùm timer ma thời gian delay phu thuộc vào 1 port bất kỳ chẳng hạn là port p0 vidu port p0=255 thì thời gian delay sẽ là 255ms

  • #2
    Nguyên văn bởi sdtuan Xem bài viết
    Em muốn viết 1 chương trình delay dùm timer ma thời gian delay phu thuộc vào 1 port bất kỳ chẳng hạn là port p0 vidu port p0=255 thì thời gian delay sẽ là 255ms
    như vậy là bộ đếm của bạn lớn nhất là 255
    bạn có thể nạp vào tl0 như sau
    mov th0,#ffh
    mov TL0,-p0

    Comment


    • #3
      sory mình nhầm
      bạn viết như sau
      .............
      .................
      ....................
      .................
      MOV TH0,#HIGH(-1000)
      MOV TL0,#LOW(-1000)
      mov r0,p0
      setb tr0
      here:sjmp here
      ngat_t0:
      CLR TR0
      MOV TH0,#HIGH(-1000)
      MOV TL0,#LOW(-1000)
      SETB TR0
      ;*****
      DEC r0
      CJNE r0,#255,KT
      công việc
      mov r0,p0
      kt:
      ret

      Comment


      • #4
        anh giải thích dùm em dc ko

        Comment


        • #5
          MOV TH0,#HIGH(-1000)
          MOV TL0,#LOW(-1000)
          mov r0,p0
          setb tr0
          here:sjmp here
          Đây là phần khởi tạo ngắt. Có nghĩa là cứ sau 1ms thì 1 ngắt timer sẽ dc kich hoạt.
          ngat_t0:
          CLR TR0
          MOV TH0,#HIGH(-1000)
          MOV TL0,#LOW(-1000)
          SETB TR0
          ;*****
          DEC r0
          CJNE r0,#255,KT
          ;công việc
          mov r0,p0
          kt:
          ret
          Đây là chương trình phục vụ ngắt timer0.Sau khi ngắt dc kich hoạt thì chương trình phục vụ ngắt dc thực hiện.Chương trình này sẽ giảm r0 và so sánh với 0(tức là 255) nếu khác thì sẽ nhảy đến kt và trở lại chương trình chính, công việc này tiếp tục đến khi nào r0=0 va như vậy thì sẽ delay =r0*1ms .Khi r0=0 thì nó sẽ cập nhập giá trị của P0.

          Comment


          • #6
            bạn enter88 đã trình bày khá rõ rồi bạn có cần giải thích gì thêm không

            Comment


            • #7
              LJMP MAIN
              ORG 000BH
              LJMP NGAT_T0
              MAIN:
              MOV TMOD,#11H
              MOV TH0,#HIGH(-1000)
              MOV TH0,#LOW(-1000)
              MOV R0,P0
              SETB EA
              SETB ET0
              SETB TR0
              NGAT_T0:
              DEC R0
              CJNE R0,#255,KT
              MOV R0,P0
              ****** CONG VIEC*****
              MOV R0,P0
              RETI
              kt:

              vây nhãn kt mình có phải làm ji để nó way lại chương trình chính

              Comment


              • #8
                kt:
                RETI
                thế mới đúng .sau đó nó sẽ tự quay về chương trình chính và bắt đầu ngắt mới

                Comment


                • #9
                  em hieu roi cam on 2 pac nhieu lam

                  Comment


                  • #10
                    pác enter88 gặp em em nhờ 1 chút dc ko
                    yahoo của em ở bên dưới
                    8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
                    liên lạc với em qua địa chi email: Mob: 01882.076.989

                    Comment


                    • #11
                      em chưa hiểu 2 lệnh này lắm:
                      MOV TH0,#HIGH(-1000)
                      MOV TH0,#LOW(-1000)
                      nó dc sử dụng khi nào,max là bao nhiêu?
                      mà mình cứ phải nạp số âm vào ah? dùng khai báo như thế này trong trường hơp như thế nao?
                      mạo mụi hỏi mong ai biết trả lơi cho em .vì em chưa dùng cái này bao giờ

                      Comment


                      • #12
                        Nguyên văn bởi dung h Xem bài viết
                        em chưa hiểu 2 lệnh này lắm:
                        MOV TH0,#HIGH(-1000)
                        MOV Tl0,#LOW(-1000)
                        nó dc sử dụng khi nào,max là bao nhiêu?
                        mà mình cứ phải nạp số âm vào ah? dùng khai báo như thế này trong trường hơp như thế nao?
                        mạo mụi hỏi mong ai biết trả lơi cho em .vì em chưa dùng cái này bao giờ
                        nó tương đương với lệnh

                        MOV TH0,#HIGH(65536-1000)
                        MOV TL0,#LOW(65536-1000)
                        tức là nạp vào timer giá trị = 65536 - 1000 (= 1ms)
                        byte cao đưa vào TH0 byte thấp đưa vào TL0

                        Comment


                        • #13
                          í, cái này trong giáo trình có giải thích mà.
                          nói nôm na như vầy nhé, giả sử cài TIMER là 8bit, nó sẽ đếm từ 0->255, vậy bạn muốn delay 10uS thì làm sao, bạn cài cho TIMER giá trị ban đầu là 245, vậy sao 10uS nó sẽ tràn về 0. giá trị 245 ~ (-10) đó (8bit). người ta dùng giá trị âm cho dễ nhớ hơn.

                          Comment


                          • #14
                            em chưa hiểu 2 lệnh này lắm:
                            MOV TH0,#HIGH(-1000)
                            MOV TH0,#LOW(-1000)
                            nó dc sử dụng khi nào,max là bao nhiêu?
                            mà mình cứ phải nạp số âm vào ah? dùng khai báo như thế này trong trường hơp như thế nao?
                            mạo mụi hỏi mong ai biết trả lơi cho em .vì em chưa dùng cái này bao giờ
                            Khi dùng timer ở chế độ 16 bít, bạn phải nạp giá trị đầu cho timer vào 2 thanh ghi là TH và TL. Trong chế độ 16 bít, thì giá trị đếm tối đa có thể lên đến 65536, tức là giá trị 16bit = 2 byte. Đưa byte cao vào TH, byte thấp vào TL.
                            For a better world

                            Comment


                            • #15
                              mình xin bổ xung thêm nhé, nếu nói đến timer để delay thì bạn cần đề cập thêm giá trị của thạch anh, nó góp phần vào định thời, nếu bạn xài thạch anh 11.0592 MHz thì giá trị khác, nếu xài 12MHz thì khác.
                              hãy cố gắng dù vướn phải thất bại!!!!!!!!

                              Comment

                              Về tác giả

                              Collapse

                              sdtuan Tìm hiểu thêm về sdtuan

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X